/* MultiButton 使用

使用按键驱动 继电器反复动作 */


#include <rtthread.h>
#include <rtdevice.h>
#include <board.h>

#include "multi_button.h"
#include "stm32f1xx_hal.h"
#include "stm32f103xb.h"
#include "my_relay.h"
/* 设置继电器输出状态 */
uint8_t relay_output = 0;
/* 按键回调函数 */
void btn1_pressdown_handler(void *btn);
/* 读取PIN状态 */
int read_button_GPIO()
{
    return HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_8);
}
/* 申请按键结构体 */
 struct button button1;


/* 按键线程的入口函数 */
void btn_thread_entry(void *p)
{
    while(1)
    {
        rt_thread_delay(5);
        /* 很重要！！！这个时钟必须添加！ */
        button_ticks();
    }
}

/* 正式函数 */
int mykey(void)
{
   /*  初始化继电器 */
   relay_init();
   
    /* 初始化 */
    button_init(&button1,read_button_GPIO,0);
    /* 绑定按键电平以及对应的回调函数 */
    button_attach(&button1,PRESS_DOWN,btn1_pressdown_handler);
    button_start(&button1);
    rt_thread_t tid;
    tid = rt_thread_create("btn",btn_thread_entry,RT_NULL,512,10,10);
    if(tid == RT_NULL)
        return RT_ERROR;
    rt_thread_startup(tid);
 
 
    return RT_EOK;
}


void btn1_pressdown_handler(void *btn)
{
    
    relay_output =  ~relay_output ;

    if( relay_output == 0 )
    {
        relay_off();
        rt_kprintf("------------继电器关闭-----------\r\n");
    }
    else
    {
        relay_on();
        rt_kprintf("------------继电器打开-----------\r\n");
    }
    

    /* rt_kprintf("------------按键被按下-----------\r\n"); */

}

